function decodeUplink(input) {
        return { 
            data: Decode(input.fPort, input.bytes, input.variables)
        };   
}
function datalog(i,bytes){
  var aa=(bytes[0+i]<<8 |bytes[1+i])/1000
  var bb=bytes[2+i]<<8 |bytes[3+i]
  var cc=bytes[4+i]<<8 |bytes[5+i]
  var dd=(bytes[6+i]&0x01)?"YES":"NO"; 
  var ee=((bytes[6+i]>>1)&0x01)?"TRUE":"FALSE"; 
  var ff=(bytes[6+i]&0x40)?"1":"0"; 
  var gg= getMyDate((bytes[7+i]<<24 | bytes[8+i]<<16 | bytes[9+i]<<8 | bytes[10+i]).toString(10));
  var string='['+aa+','+bb+','+cc+','+dd+','+ee+','+ff+','+gg+']'+',';  
  
  return string;
}

function getzf(c_num){ 
  if(parseInt(c_num) < 10)
    c_num = '0' + c_num; 

  return c_num; 
}

function getMyDate(str){ 
  var c_Date;
  if(str > 9999999999)
     c_Date = new Date(parseInt(str));
  else 
     c_Date = new Date(parseInt(str) * 1000);
  
  var c_Year = c_Date.getFullYear(), 
  c_Month = c_Date.getMonth()+1, 
  c_Day = c_Date.getDate(),
  c_Hour = c_Date.getHours(), 
  c_Min = c_Date.getMinutes(), 
  c_Sen = c_Date.getSeconds();
  var c_Time = c_Year +'-'+ getzf(c_Month) +'-'+ getzf(c_Day) +' '+ getzf(c_Hour) +':'+ getzf(c_Min) +':'+getzf(c_Sen); 
  
  return c_Time;
}
function Decode(fPort, bytes, variables) {
  var bat;
  if(fPort == 2)
  {
    value = (bytes[0]<<8 | bytes[1]);
    bat = value/1000;
    value = (bytes[2]<<8 | bytes[3]);
    var dis1 = value;
    value = (bytes[4]<<8 | bytes[5]);
    var dis2 =value;
    var dalarm_count = (bytes[6]>>2)&0x3F;
    var distance_alarm = (bytes[6]>>1)&0x01;
    var inter_alarm = (bytes[6])&0x01;
    return {
	  Node_type:"MDS200-LB",
      Bat:bat,
      dis1:dis1,
      dis2:dis2,
      DALARM_count:dalarm_count,
      Distance_alarm:distance_alarm,
      Interrupt_alarm:inter_alarm
    };
  }
   if(fPort==0x03)
  {
    var pnack= ((bytes[0]>>7)&0x01) ? "True":"False";
    for(var i=0;i<bytes.length;i=i+11)
    {
      var data= datalog(i,bytes);
      if(i=='0')
        data_sum=data;
      else
        data_sum+=data;
    }
    return{
	Node_type:"MDS200-LB",
    DATALOG:data_sum,
    PNACKMD:pnack,
    };
  }
  else if(fPort == 5)
  {
    var model="";
    if(bytes[0]==0x2B)
      model="MDS200-LB";
    var version=(bytes[1]<<8 | bytes[2]).toString(16);
    version = parseInt(version,10);
    var fre_band="";
    switch(bytes[3])
    {
      case 0x01:fre_band="EU868";break;
      case 0x02:fre_band="US915";break;
      case 0x03:fre_band="IN865";break;
      case 0x04:fre_band="AU915";break;
      case 0x05:fre_band="KZ865";break;
      case 0x06:fre_band="RU864";break;
      case 0x07:fre_band="AS923";break;
      case 0x08:fre_band="AS923-1";break;
      case 0x09:fre_band="AS923-2";break;
      case 0x0a:fre_band="AS923-3";break;
      case 0x0b:fre_band="CN470";break;
      case 0x0c:fre_band="EU433";break;
      case 0x0d:fre_band="KR920";break;
      case 0x0e:fre_band="MA869";break;
    }
    var sub_band = bytes[4];
    bat = (bytes[5]<<8 | bytes[6])/1000;
    
    return {
      Sensor_model:model,
      Ver:version,
      Fre_band:fre_band,
      Sub_band:sub_band,
      Bat:bat
    };
  }
  else if(fPort == 4)
  {
    var tdc = (bytes[0]<<16 | bytes[1]<<8 | bytes[2]);
    var atdc = (bytes[3]);
    var alarm_min = (bytes[4]<<8 | bytes[5]);
    var alarm_max = (bytes[6]<<8 | bytes[7]);
    var input = (bytes[8]);
    return {
	  Node_type:"MDS200-LB",
      TDC:tdc,
      ATDC:atdc,
      Alarm_min:alarm_min,
      Alarm_max:alarm_max,
      Interrupt:input
    };
  }
}
